package mysql8学习.高级.第04章_逻辑架构;

/**
 * 第2层:服务层
 * 第二层架构主要完成大多数的核心服务功能，
 * 如SQL接口，并完成缓存的查询，SQL的分析和优化及部分内置函数的执行。
 * 所有跨存储引擎的功能也在这一层实现，如过程、函数等。
 * 在该层，服务器会解析查询并创建相应的内部解析树，并对其完成相应的优化:
 * 如确定查询表的顺序，是否利用索引等，最后生成相应的执行操作。
 * 如果是SELECT语句，服务器还会查询内部的缓存。
 * 如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。
 *
 * ● SQL Interface: SQL接口
 * 。接收用户的SQL命令，并且返回用户需要查询的结果。
 *   比如SELECT .. FROM就是调用SQL Interface
 * 。MySQL支持DML (数据操作语言)、DDL (数据定义语言)、存储过程、视图、
 *   触发器、自定义函数等多种SQL语言接口
 *
 * ● Parser: 解析器
 *  。在解析器中对SQL语句进行语法分析、语义分析。
 *    将SQL语句分解成数据结构，并将这个结构传递到后续步骤，
 *    以后SQL语句的传递和处理就是基于这个结构的。
 *    如果在分解构成中遇到错误，那么就说明这个SQL语句是不合理的。
 *  。在SQL命令传递到解析器的时候会被解析器验证和解析，并为其创建语法树，
 *    并根据数据字典丰富查询语法树，会验证该客户端是否具有执行该查询的权限。
 *    创建好语法树后，MySQL还会对SQL查询进行语法上的优化,进行查询重写。
 * ● Optimizer:查询优化器
 *   。SQL语句在语法解析之后、查询之前会使用查询优化器确定SQL语句的执行路径（全表检索或索引检索），
 *     生成一个执行计划。
 *   。这个执行计划表明应该使用哪些索引进行查询(全表检索还是使用索引检索)，表之间的连接顺序如何，
 *    最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询，并将查询结果返回给用户。
 *   。它使用“选取-投影连接”策略进行查询。例如:
 *     SELECT id, name FROM student WHERE gender ='女' ;
 *     这个SELECT查询先根据 WHERE 语句进行选取，而不是将表全部查询出来以后再进行gender过滤。
 *     这个SELECT查询先根据id和name进行属性投影，而不是将属性全部取出以后再进行过滤,
 *     将这两个查询条件连接起来生成最终查询结果。
 *
 * ● Caches & Buffers:查询缓存组件
 *   。MySQL内部维持着一些Cache和Buffer, 比如Query Cache用来缓存一条SELECT语句的执行结果，
 *    如果能够在其中找到对应的查询结果，那么就不必再进行查询解析、优化和执行的整个过程了，
 *    直接将结果反馈给客户端。
 *   。这个缓存机制是由一系列小缓存组成的。比如表缓存，记录缓存，key缓存， 权限缓存等。
 *   。这个查询缓存可以在不同客户端之间共享。
 *   。从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL8.0中删除。
 *   大多数情况查询缓存就是个鸡肋, 只有和原来的sql完全一样才会返回
 *   如果只要修改 就会出现错误返回
 */
public class B2_服务层 {
}
